package cc.eddic.pratice.programmingparadigms.streampractice;

import cc.eddic.pratice.programmingparadigms.advanced.EddicInterface;
import cc.eddic.pratice.programmingparadigms.exam.domain.Answer;
import cc.eddic.pratice.programmingparadigms.exam.domain.Question;

import java.util.List;

/**
 * Stream 练习
 */
@EddicInterface(isPrototype = true)
public interface StreamPractice {
    /**
     * 转换为问题和正确答案列表
     *
     * @param questionList 题目列表
     * @return 问题和正确答案 List
     */
    List<QuestionAndAnswer> mapToQuestionAndAnswer(List<Question> questionList);

    /**
     * 计算题目正确率
     *
     * @param answerList 考生的答案列表（其中引用了问题、选项）
     * @return 题目正确率列表
     */
    default List<QuestionAccuracy> calculateAccuracy(List<Answer> answerList) {
        throw new UnsupportedOperationException();
    }

    /**
     * 按照姓名、分类名、统计分数
     *
     * @param answerList 考生的答案列表（其中引用了问题、选项、分类）
     * @return 姓名和分类统计分数 List
     */
    default List<ScoreOfStudentAndCategory> calculateScoreOfStudentAndCategory(List<Answer> answerList) {
        throw new UnsupportedOperationException();
    }
    /**
     * 按照姓名、子分类名统计分数
     *
     * @param answerList 考生的答案列表（其中引用了问题、选项、分类）
     * @return 姓名和分类统计分数 List
     */
    default List<ScoreOfStudentAndCategory> calculateScoreOfStudentAndSubCategory(List<Answer> answerList) {
        throw new UnsupportedOperationException();
    }
}
